home *** CD-ROM | disk | FTP | other *** search
/ Mac Cube 4: Multimedia Applications / MacCube Volume 4: Multimedia Applications.iso / Graphics / POV Ray / POVSOURCE / SOURCE / PovMac.h < prev    next >
Text File  |  1994-02-09  |  13KB  |  408 lines

  1. /*==============================================================================
  2. Project:    POV-Ray
  3.  
  4. Version:    2.2
  5.  
  6. File:    PovMac.h
  7.  
  8. Description:
  9.     This file contains typedefs, function prototypes and extern var declarations
  10.     that need to be exported from pov.c.
  11. ------------------------------------------------------------------------------
  12. Authors:
  13.     Thomas Okken, David Lichtman, Glenn Sugden
  14.     Jim Nitchals, Eduard [esp] Schwan
  15. ------------------------------------------------------------------------------
  16.     from Persistence of Vision Raytracer
  17.     Copyright 1993 Persistence of Vision Team
  18. ------------------------------------------------------------------------------
  19.     NOTICE: This source code file is provided so that users may experiment
  20.     with enhancements to POV-Ray and to port the software to platforms other 
  21.     than those supported by the POV-Ray Team.  There are strict rules under
  22.     which you are permitted to use this file.  The rules are in the file
  23.     named POVLEGAL.DOC which should be distributed with this file. If 
  24.     POVLEGAL.DOC is not available or for more info please contact the POV-Ray
  25.     Team Coordinator by leaving a message in CompuServe's Graphics Developer's
  26.     Forum.  The latest version of POV-Ray may be found there as well.
  27.  
  28.     This program is based on the popular DKB raytracer version 2.12.
  29.     DKBTrace was originally written by David K. Buck.
  30.     DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  31. ------------------------------------------------------------------------------
  32. More Info:
  33.     This Macintosh version of POV-Ray was created and compiled by Jim Nitchals
  34.     (Think 5.0) and Eduard Schwan (MPW 3.2), based (loosely) on the original
  35.     port by Thomas Okken and David Lichtman, with some help from Glenn Sugden.
  36.  
  37.     For bug reports regarding the Macintosh version, you should contact:
  38.     Eduard [esp] Schwan
  39.         CompuServe: 71513,2161
  40.         Internet: jl.tech@applelink.apple.com
  41.         AppleLink: jl.tech
  42.     Jim Nitchals
  43.         Compuserve: 73117,3020
  44.         America Online: JIMN8
  45.         Internet: jimn8@aol.com -or- jimn8@applelink.apple.com
  46.         AppleLink: JIMN8
  47. ------------------------------------------------------------------------------
  48. Change History:
  49.     920815    [jln]    version 1.0 Mac released.
  50.     920908    [esp]    version 1.1 alpha Mac
  51.     921221    [esp]    Changed to include QuickTime 1.5 Headers
  52.     930826    [esp]    Added 1.x/2.x ifdefs in
  53.     931001    [esp]    version 2.0 finished (Released on 10/4/93)
  54.     931119    [djh]    2.0.1 source conditionally compiles for PPC machines, keyword __powerc
  55. ==============================================================================*/
  56.  
  57. #if !defined(POVMAC_H)
  58. #define POVMAC_H
  59.  
  60.  
  61. /*==== POV definitions =====*/
  62. #include "FRAME.H"
  63.  
  64. /*==== Mac definitions =====*/
  65.  
  66.  
  67. /*==== QuickTime compression headers ====*/
  68.  
  69. #if defined (THINK_C)
  70. // THINK C has problems linking to StdCompressionGlue.o, fix it!
  71. #define OpenStdCompression OPENSTDCOMPRESSION
  72. #endif // THINK_C
  73. #include "ImageCompression.h"
  74. #include "QuickTimeComponents.h"
  75.  
  76. #if defined(__powerc)
  77. #include <MixedMode.h>
  78. #endif
  79.  
  80.  
  81. /*==== Animate header ====*/
  82. #include "Animate.h"    // for AnimRec_t definition in prefs
  83.  
  84.  
  85.  
  86. /*==== Think to non-THINK compatibility ====*/
  87.  
  88. #if !defined(THINK_C)
  89. #include <Strings.h>    // p<->cstr
  90. #endif // THINK_C
  91.  
  92.  
  93. /*==== definitions ====*/
  94.  
  95. // Application prefs file
  96. #define    POV_RAY_PREFS_FNAME        "\pPOV-Ray 2.0 Prefs"
  97.  
  98. #define    kPrefsFileType            'pref'
  99.  
  100. // default stack size
  101. #define    DEFAULT_STACK_SIZE        80000
  102.  
  103. #define _QD32Trap 0xAB03 /* 32 bit Quickdraw trap */
  104.  
  105. #define kRsrcFileClosed            (-1)
  106.  
  107. /* keyboard values used by ModalFilter() */
  108. #define kReturnKey                0x0D
  109. #define kEnterKey                0x03
  110. #define kEscKey                    0x1B
  111. #define kTabKey                    0x09
  112.  
  113. /* All dialogs have a user item #3 for outlining buttons */
  114. #define kDefaultItem            3
  115.  
  116. /* Windows */
  117. #define    kWindID_p2w                9600    // POV-Ray status window
  118.  
  119. /* Dialog resource IDs */
  120. #define    kdlog_P2W_INIT_ERROR    9600
  121.  
  122. #define    kdlog_ConfigFatalErr    129    // bad hardware/software config
  123. #define    kdlog_GenericFatalErr    152 // general purpose fatal error dialog
  124. #define    kdlog_CantOpenOverDirty    154    // cant open over existing busy file
  125. #define    kdlog_CantOpenNonText    155    // cant open non-text files
  126. #define    kdlog_UseFPUVersion        158    // Note: should use FPU version of POV-Ray
  127.  
  128. /* our application's creator signature */
  129. #define    kAppSignature    'PvRy'
  130.  
  131. /* POV Menu equates */
  132. #define num_of_menus    7
  133. #define num_of_submenus 3
  134. #define menu_offset        128        // ID of the first menu
  135. #define submenu_offset    200        // ID of the first submenu
  136.  
  137. /* Apple Menu */
  138. #define apmn_ID            128
  139. #define apmn_about        1
  140.  
  141. /* File Menu */
  142. #define fmn_ID            129
  143. #define fmn_new            1
  144. #define fmn_open        2
  145. #define fmn_close        4
  146. #define fmn_save        5
  147. #define fmn_saveas        6
  148. #define fmn_quit        8
  149.  
  150. /* Edit Menu */
  151. #define edmn_ID            130
  152. #define edmn_undo        1
  153. #define edmn_cut        3
  154. #define edmn_copy        4
  155. #define edmn_paste        5
  156. #define edmn_clear        6
  157. #define edmn_selectAll    7
  158. #define edmn_redo        9
  159. #define edmn_goto        11
  160. #define edmn_prefs        13
  161. #define edmn_macros        15
  162. #define edmn_lookup        17
  163.  
  164. /* Image Menu */
  165. #define immn_ID            131
  166. #define immn_view        1
  167. #define immn_dither        2
  168. #define immn_custom     3
  169.  
  170. /* Render Menu */
  171. #define rnmn_ID            132
  172. #define rnmn_options    1
  173. #define rnmn_render        3
  174. #define rnmn_pause        4
  175. #define rnmn_stop        5
  176. #define rnmn_autosave    7
  177. #define rnmn_shutdown    8
  178. #define render_file        40
  179.  
  180. /* Processing Menu */
  181. #define psmn_ID            133
  182. #define psmn_border        1
  183. #define psmn_darken        2
  184. #define psmn_lighten    3
  185. #define psmn_reduceC    4
  186. #define psmn_increaseC    5
  187. #define psmn_invert        6
  188. #define psmn_divider1    7
  189. #define psmn_revert        8
  190.  
  191. /* Windows Menu */
  192. #define wndmn_ID        134
  193. #define wndmn_status    1
  194. #define wndmn_source    2
  195. #define wndmn_image        3
  196.  
  197. /* View submenu */
  198. #define viewmn_ID        200
  199. #define viewmn_hidden        1
  200. #define viewmn_Size2Window    2
  201. #define viewmn_normal        3
  202. #define viewmn_x2            4
  203. #define viewmn_x3            5
  204. #define viewmn_x4            6
  205.  
  206. /* palette submenu */
  207. #define plmn_ID            201
  208. #define palette_none    1
  209. #define palette_default    3
  210. #define palette_median    4
  211. #define palette_popular 5
  212. #define palette_var_min    6
  213. #define palette_octree    7
  214.  
  215. /* don't want to collide with system equates, so... */
  216. #define varianceMethod    1000
  217. #define octreeMethod    1001
  218.  
  219.  
  220. #if !defined (min)
  221. #define min(x,y) ((x>y)?y:x)
  222. #endif // min
  223.  
  224.  
  225. // Application internal configuration settings resource (stack size, etc.)
  226. #define    kAppConfigRsrc            'CNFG'
  227. #define    kAppConfigRsrcID        1000
  228.  
  229. typedef struct
  230. {
  231.     long        stackSize;            // # of bytes to grow stack to
  232.     short        memTrackingSize;    // % of heap to use for malloc-tracking arrays
  233. } app_config_rec_t, *app_config_ptr_t, **app_config_hdl_t;
  234.  
  235.  
  236. /* the resource ID of the preferences resources (1.0 was 128, 2.0 is 200) */
  237. #define    kPrefs_rsrcID    200
  238.  
  239.  
  240. /* the version # of the prefs resources - increment this when prefs_rec_t's change */
  241. /* This currently follows the app version #, so 0x0201 is version 2.01 */
  242. #define    kPrefs_rsrcVers        0x0201
  243.  
  244.  
  245. /*==== preferences resource - Application ====*/
  246.  
  247. /* values for background CPU usage in App Prefs */
  248. #define    kMinMultiFriendly        1
  249. #define    kDefMultiFriendly        5
  250. #define    kMaxMultiFriendly        11
  251.  
  252. #define    kAppPrefsRsrc    'aPrf'
  253.  
  254. typedef enum
  255. {
  256.     eWhenNtf_Quiet=0,        // don't notify at all when done
  257.     eWhenNtf_BgOnly,        // notify when done, only if in background
  258.     eWhenNtf_FgOnly,        // notify when done, only if in foreground
  259.     eWhenNtf_BgFg            // notify when done, in background or foreground
  260. } WhenNotify_t;
  261.  
  262. typedef enum
  263. {
  264.     eHowNtf_Noise=0,        // beep when done
  265.     eHowNtf_Dlg,            // show dialog when done
  266.     eHowNtf_NoiseDlg        // beep & show dialog when done
  267. } HowNotify_t;
  268.  
  269.  
  270. typedef struct
  271. {
  272.     short            prefsVersion;
  273.     short            howMultiFriendly;        // how tight are YOUR loops?
  274.     WhenNotify_t    whenToNotify;            // circumstances to notify
  275.     HowNotify_t        howToNotify;            // style of notification
  276.     FSSpec            includeDirFSSpec;        // search path directory ref (name=volname!)
  277. } app_prefs_rec_t, *app_prefs_ptr_t, **app_prefs_hdl_t;
  278.  
  279.  
  280. /*==== preferences resource - File ====*/
  281.  
  282. // Max Symbols value (+ms)
  283. // Goes up from 500, in increments of 500
  284. #define    kMaxSymMinVal            500                    // min value allowed
  285. #define    kMaxSymFactor            500                    // increment value
  286. #define    kMaxSymMaxVal            (kMaxSymMinVal+8*kMaxSymFactor)    // max value allowed (8 menu items)
  287. #define    kDefaultMaxSym            MAX_CONSTANTS    // default (from config.h)
  288.  
  289. // Progress item values
  290. #define kProgNone        1    // quiet
  291. #define kProgMinimal    2    // Mac related info
  292. #define kProgVerbose    3    // Mac & Core info
  293. #define kProgDebug        4    // Core debug messages to external file
  294. #define kProgMax        kProgDebug
  295.  
  296. // Min language version values (+mv)
  297. #define kMinLangVersion        1    // POV-Ray 1.0
  298. #define kMaxLangVersion        2    // POV-Ray 2.0
  299.  
  300. #define    kFilePrefsRsrc    'fPrf'
  301.  
  302. typedef struct
  303. {
  304.     short        prefsVersion;        // magic version # of this record (kPrefs_rsrcVers)
  305.     Rect        srcWind_pos;        // source window placement on screen
  306.     Rect        statWind_pos;        // status window placement
  307.     Rect        imageWind_pos;        // image window placement
  308.     short        imageWidth;            // width of image in pixels
  309.     short        imageHeight;        // height of image in pixels
  310.     Point        imageUpperLeft;        // image scroll position within window
  311.     Rect        selectionArea;        // image selection area within window (+SC/+EC/+SR/+ER)
  312.     OSType        pictFileCreator;    // PICT file creator
  313.     OSType        targaFileCreator;    // Targa file creator
  314.     short        renderQuality;        // quality index for image (+Q 0-9)
  315.     short        custom_palette;        // style of palette to use
  316.     short        imageMagFactor;        // magnification factor of image window (0,1,2,3,4)
  317.     short        createTargaOutfile;    // True if generating Targa output file
  318.     short        continueTarga;        // True to use previous Targa file
  319.     short        doDither;            // True to dither image
  320.     short        doBoundSlabs;        // True to use bounding slabs (+MB)
  321.     short        boundSlabThreshold;    // Min. # of objects before enabling slabs
  322.     short        progress;            // levels of verbose progress during render (1-4) (+V1)
  323.     short        languageVersion;    // for POV-Ray +MV command
  324.     short        maxSymbolsVal;        // for POV-Ray +MS command
  325.     short        doAnimation;        // True if doing animation
  326.     short        doCompression;        // True if compressing image
  327.     short        do24BitPict;        // True if doing 24 bit PICTs, false = 8 bit indexed
  328.     short        doAntialias;        // True if antialiasing
  329.     float        antialiasThreshold;    // value of anti-alias threshold
  330.     short        antialiasDepth;        // for POV-Ray +R command
  331.     float        antiJitterScale;    // for POV-Ray +J command
  332.     AnimRec_t    animRec;            // animation info record
  333.     SCSpatialSettings    sc_DialogParams;
  334. } file_prefs_rec_t, *file_prefs_ptr_t, **file_prefs_hdl_t;
  335.  
  336.  
  337. /*==== POV-Ray engine globals ====*/
  338.  
  339. // need to reference these from POV engine
  340. extern volatile int            Stop_Flag;
  341. extern DBL                    Max_Trace_Level;            // render.c (5)
  342. extern int                    token_count, line_count;    // tokenize.c (0,5)
  343. extern int                    Include_File_Index;            // tokenize.c (0)
  344. extern struct Token_Struct    Token;                    // tokenize.c
  345.  
  346. extern void alt_main(short argc, char **argv);
  347.  
  348.  
  349. /*==== pov.c globals ====*/
  350.  
  351. extern p2w_WindowPtr_t    gp2wWindow;            // the Status (text) window
  352.  
  353. extern app_prefs_hdl_t    gAppPrefs_h;        // App prefs from prefs file
  354. extern file_prefs_hdl_t    gFilePrefs_h;        // for remembering source window resizing
  355. extern file_prefs_hdl_t    gPrefs2Use_h;        // points to file or default prefs
  356.  
  357. extern Boolean            gHasSys70;            // Can we do System 7 stuff?
  358. extern Boolean            gHasWNEvent;         // WaitNextEvent trap around?
  359. extern Boolean            gHasFSSpecs;         // Can use FSSpec calls?
  360. extern Boolean            gHasAppleEvents;    // Apple Events available for doing shutdown?
  361. extern Boolean            gHas32BitQD;         // is 32 bit Quickdraw available for depth & dithering
  362. extern Boolean            gHasPictUtils;            // is Picture Utils (extract best palette) avail?
  363. extern Boolean            gHasImageCompressionMgr; // Is QuickTime Image compression available?
  364. extern Boolean            gHasPopups;            // are popup menus avail?
  365.  
  366. extern Boolean            gInBackground;        // is the program currently switched out
  367. extern Boolean            gDoingRender;        // for determining the menu states
  368. extern Cursor            gEditCursor;
  369. extern Cursor            gWaitCursor;
  370. extern Rect                gDragBounds;        // window dragging boundary
  371. extern Boolean            gCanUndo;            // can we undo this operation?
  372.  
  373.  
  374. /*==== PowerPC-specific globals ====*/
  375.  
  376. #if defined(__powerc)
  377. extern QDGlobals qd;
  378. extern RoutineDescriptor gModalFilterRD;
  379. extern RoutineDescriptor gOutlineButtonRD;
  380. extern RoutineDescriptor gPopupMenuRD;
  381. extern RoutineDescriptor gDimDlogTextRD;
  382. extern RoutineDescriptor gShowProgressRD;
  383. extern RoutineDescriptor gAEOAppRD;
  384. extern RoutineDescriptor gAEODocRD;
  385. extern RoutineDescriptor gAEQuitRD;
  386. extern RoutineDescriptor gPutPICTRD;
  387. extern RoutineDescriptor gVScrollRD;
  388. extern RoutineDescriptor gHScrollRD;
  389. #endif // __powerc
  390.  
  391.  
  392. /*==== pov.c Prototypes ====*/
  393.  
  394. pascal void    outlineDefaultButton(DialogPtr theDialog, short theItem);
  395. void    SetupDefaultButton(DialogPtr theDialog);
  396. ControlHandle    GrabDItemHandle(DialogPtr theDialog, short theGetItem);
  397. pascal    Boolean    ModalFilter(DialogPtr theDialog, EventRecord *theDialogEvent, short *theDialogItem);
  398. short    displayDialog(short dlogID, char *s, short err, WindCentering_t doCentering, WindPositioning_t whereToShow);
  399. void    GetBestDialogPos(Point *wherep);
  400. void    restore_state(int n);
  401. void    WriteFilePrefs(void);
  402. void    support_undo(char *the_reason, short flush_redo);
  403. void    Cooperate(int doImmediate);
  404. void    exit_handler(void);
  405.  
  406.  
  407. #endif // POVMAC_H
  408.